
#ifndef _H_ARRAYCTRL
#define _H_ARRAYCTRL

#include "public_def.h"
#define ACHANDLE uint32

typedef void (*OnObjectDestroyHandle)(void *object);

//Create dynamic array
//
//Parameter:
//	destroyObjectCallBack 	Callback handle for removing object from the list
//	
//Return:
//	Handle of succ created array
//
ACHANDLE AC_Create(OnObjectDestroyHandle destroyObjectCallBack);

//Add an object to the list
//
//Parameter:
//	handle		handle of dynamic array
//	object		object reference		
//Return:
//	Object index in current list
//
int AC_Add(ACHANDLE handle, void * object);

//Get the number of elements
//
//Parameter:
//	handle		handle of dynamic array
//Return:
//	Number of elements
//
int AC_Count(ACHANDLE handle);

//Get object by index
//
//Parameter:
//	handle		handle of dynamic array
//	iIndex		object index
//
//Return:
//	object reference
//
void *AC_Get(ACHANDLE handle, int iIndex);

//Insert object by index
//
//Parameter:
//	handle		handle of dynamic array
//	iIndex		object index
//	
//Return:
//	current index
//
int AC_Insert(ACHANDLE handle, void * object, int iIndex);

//Remove object by index
//
//Parameter:
//	handle		handle of dynamic array
//	iIndex		object index
//	
//Return:
//	None
//
void AC_Remove(ACHANDLE handle, int iIndex);

//Remove object by object reference
//
//Parameter:
//	handle		handle of dynamic array
//	object 		object reference
//	
//Return:
//	None
//
void AC_RemoveObject(ACHANDLE handle, void * object);

//Get the previous object
//
//Parameter:
//	handle		handle of dynamic array
//Return:
//	object reference
//
void *AC_Prev(ACHANDLE handle);

//Get the next element
//
//Parameter:
//	handle		handle of dynamic array
//Return:
//	object reference
//
void *AC_Next(ACHANDLE handle);

//Clear dynamic array
//
//Parameter:
//	handle		handle of dynamic array
//	
//Return:
//	None
//
void AC_Clear(ACHANDLE handle);

//Destroy dynamic array
//
//Parameter:
//	handle		handle of dynamic array
//	
//Return:
//	None
//
void AC_Destroy(ACHANDLE *handle);

//Get the current index in array
//
//Parameter:
//	handle		handle of dynamic array
//	
//Return:
//	object index
//
int AC_Pos(ACHANDLE handle);

//Get the first element 
//
//Parameter:
//	handle		handle of dynamic array
//	
//Return:
//	object reference
//
void *AC_First(ACHANDLE handle);

//Get the last element
//
//Parameter:
//	handle		handle of dynamic array
//	
//Return:
//	object reference
//
void *AC_Last(ACHANDLE handle);

//Determine whether the cursor is at end of list
//
//Parameter:
//	handle		handle of dynamic array
//	
//Return:
//	true / false
//
bool AC_IsLast(ACHANDLE handle);

#endif

